package org.algorithm.二师兄.栈.第1周;


import java.util.Stack;

/**
 * @date 2022-04-06 星期三 00:00
 * 栈排序。 编写程序，对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据，但不得将元素复制到别的数据结构（如数组）中。该栈支持如下操作：push、pop、peek 和 isEmpty。当栈为空时，peek返回 -1。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/sort-of-stacks-lcci
 */
public class 栈排序 {

    public static void main(String[] args) {
        SortedStack sortedStack = new SortedStack();
        sortedStack.push(1);
        sortedStack.push(2);
        sortedStack.peek();
        sortedStack.pop();
        sortedStack.peek();



    }
    static class SortedStack {

        Stack<Integer> stack = new Stack();
        public SortedStack() {

        }

        public void push(int val) {

            Stack<Integer> tmp = new Stack();

            while(!stack.isEmpty() && val >stack.peek()){
                tmp.push(stack.pop());
            }
            stack.push(val);
            while(!tmp.isEmpty()){
                stack.push(tmp.pop());
            }

        }

        public void pop() {
            if(!isEmpty()){
                stack.pop();
            }

        }

        public int peek() {
            if(!isEmpty()){
                return  stack.peek();
            }
            return -1;
        }

        public boolean isEmpty() {
            return stack.isEmpty();
        }
    }
}
